import Vue from 'vue'

import Vuex from 'vuex'

Vue.use(Vuex)

const state = {
  count:0
}

const mutations={
  increment(state){
    state.count++;
  },
  increment2(state,n=2){
    state.count+=n;
  },
  decrease(state){
    state.count--;
  },
  decrease2(state){
    state.count-=2;
  }
}

const actions={
  incrementIfOdd ({commit, state}) {
    if(state.count%2===1) {
      // 提交一个mutation请求
      commit('increment')
    }
  },
  addonestep2(context){
    context.commit('increment2');
  },
  incrementAsync ({commit}) {
    setTimeout(() => {
      // 提交一个mutation请求
      commit('increment')
    }, 1000)
  },
};

const getters={
  evenOrOdd (state) { // 当读取属性值时自动调用并返回属性值
    return state.count%2===0 ? '偶数' : '奇数'
  },
  // getters 获取到 rootState, rootGetters 作为参数。
  // rootState和 rootGetter参数顺序不要写反，一定是state在前，getter在后面，这是vuex的默认参数传递顺序， 可以打印出来看一下。
  sumcount(state,getters,rootState,rootGetter){
    console.info(state.count);
    console.info(rootState.count);
    console.info(getters);
    console.info(rootGetter);
  }
};

const store = new Vuex.Store({
  state,
  mutations,
  actions,
  getters,
});

export default store;
